package ar.uade.edu.fain.ad.server;

import java.util.ArrayList;
import java.util.Date;

import org.hibernate.classic.Session;

import ar.uade.edu.fain.ad.server.business.MedioPago;
import ar.uade.edu.fain.ad.server.business.Mesa;
import ar.uade.edu.fain.ad.server.dao.entity.AdministracionEntity;
import ar.uade.edu.fain.ad.server.dao.entity.AdministradorEntity;
import ar.uade.edu.fain.ad.server.dao.entity.CajaEntity;
import ar.uade.edu.fain.ad.server.dao.entity.CajeroEntity;
import ar.uade.edu.fain.ad.server.dao.entity.CompraNoVentaEntity;
import ar.uade.edu.fain.ad.server.dao.entity.CompraVentaEntity;
import ar.uade.edu.fain.ad.server.dao.entity.DepositoCentralEntity;
import ar.uade.edu.fain.ad.server.dao.entity.ElaboracionVentaEntity;
import ar.uade.edu.fain.ad.server.dao.entity.EmpleadoEntity;
import ar.uade.edu.fain.ad.server.dao.entity.IngredienteEntity;
import ar.uade.edu.fain.ad.server.dao.entity.ItemOrdenCompraEntity;
import ar.uade.edu.fain.ad.server.dao.entity.LocalEntity;
import ar.uade.edu.fain.ad.server.dao.entity.MedioPagoEntity;
import ar.uade.edu.fain.ad.server.dao.entity.MesaEntity;
import ar.uade.edu.fain.ad.server.dao.entity.MesaSimpleEntity;
import ar.uade.edu.fain.ad.server.dao.entity.MozoEntity;
import ar.uade.edu.fain.ad.server.dao.entity.OrdenCompraEntity;
import ar.uade.edu.fain.ad.server.dao.entity.PlatoEntity;
import ar.uade.edu.fain.ad.server.dao.entity.ProductoEntity;
import ar.uade.edu.fain.ad.server.dao.entity.ProveedorEntity;
import ar.uade.edu.fain.ad.server.dao.entity.RecetaEntity;
import ar.uade.edu.fain.ad.server.dao.entity.SalonEntity;
import ar.uade.edu.fain.ad.server.dao.entity.SectorEntity;
import ar.uade.edu.fain.ad.server.dao.entity.UnidadEntity;
import ar.uade.edu.fain.ad.server.util.persistence.HibernateUtil;

public class TestCrearTablas {

	public static void main(String[] args) {

		Session session = (Session) HibernateUtil.get().getSession();

		try {
			session.beginTransaction();

			// ADMINISTRACION

			final LocalEntity local = new LocalEntity();

			local.setId(1L);
			local.setLocalDescripcion("Central");
			local.setDireccion("Av. Siempre Viva 555");
			local.setZona("Springfield");

			final ProveedorEntity proveedor = new ProveedorEntity();
			proveedor.setId(1L);
			proveedor.setNombre("Insumos Cacho");
			proveedor.setUbicacion("Congo");

			final AdministracionEntity administracion = new AdministracionEntity();
			administracion.setId(1L);
			local.setAdministracion(administracion);
			proveedor.setAdministracion(administracion);

			final AdministradorEntity administrador = new AdministradorEntity();
			administrador.setId(1L);
			administrador.setLogin("admin");
			administrador.setNombre("Administrador");
			administrador.setPassword("admin");
			administrador.setApellido("Global");
			administrador.setAdministracion(administracion);

			final DepositoCentralEntity depositoCentral = new DepositoCentralEntity();
			depositoCentral.setId(1L);
			depositoCentral.setEncargado(administrador);

			administracion.setLocal(new ArrayList<LocalEntity>());
			administracion.getLocal().add(local);
			administracion.setDepositoCentral(depositoCentral);

			// PRODUCTOS
			
			final UnidadEntity unidad1 = new UnidadEntity();
			unidad1.setId(1L);
			unidad1.setDescripcion("Gramo");

			final UnidadEntity unidad2 = new UnidadEntity();
			unidad2.setId(2L);
			unidad2.setDescripcion("Mililitro");

			final ProductoEntity producto1 = new CompraVentaEntity();
			producto1.setId(1L);
			producto1.setNombre("Bife de costilla");
			producto1.setUnidadUso(unidad1);

			final ProductoEntity producto2 = new CompraVentaEntity();
			producto2.setId(2L);
			producto2.setNombre("Papa");
			producto2.setUnidadUso(unidad1);

			final ProductoEntity producto3 = new CompraVentaEntity();
			producto3.setId(3L);
			producto3.setNombre("Leche");
			producto3.setUnidadUso(unidad2);

			final ProductoEntity producto4 = new CompraNoVentaEntity();
			producto4.setId(4L);
			producto4.setNombre("Sal");
			producto4.setUnidadUso(unidad2);
			
			final ProductoEntity producto5 = new ElaboracionVentaEntity();
			producto5.setId(5L);
			producto5.setNombre("Salsa");
			producto5.setUnidadUso(unidad2);

			// COMPRAS			
			
			final OrdenCompraEntity ordenCompra = new OrdenCompraEntity();
			ordenCompra.setId(1L);
			ordenCompra.setAdministracion(administracion);
			ordenCompra.setDestino(depositoCentral);
			ordenCompra.setFecha(new Date());
			ordenCompra.setEstado("PENDIENTE");
			ordenCompra.setProveedor(proveedor);
			ordenCompra.setResponsable(administrador);
			ordenCompra.setItems(new ArrayList<ItemOrdenCompraEntity>());
			
			final ItemOrdenCompraEntity itemOrdenCompra1 = new ItemOrdenCompraEntity();
			itemOrdenCompra1.setId(1L);
			itemOrdenCompra1.setCantidad(3);
			itemOrdenCompra1.setRecibido(0);
			itemOrdenCompra1.setProducto(producto1);
			ordenCompra.getItems().add(itemOrdenCompra1);
			
			final ItemOrdenCompraEntity itemOrdenCompra2 = new ItemOrdenCompraEntity();
			itemOrdenCompra2.setId(2L);
			itemOrdenCompra2.setCantidad(5);
			itemOrdenCompra2.setRecibido(0);
			itemOrdenCompra2.setProducto(producto2);
			ordenCompra.getItems().add(itemOrdenCompra2);
			
			// SALON

			final SalonEntity salon = new SalonEntity();
			salon.setId(1L);
			salon.setLocal(local);
			salon.setEmpleados(new ArrayList<EmpleadoEntity>());
			salon.setSectores(new ArrayList<SectorEntity>());

			final SectorEntity sector = new SectorEntity();
			sector.setId(1L);
			sector.setNombre("Sector Entrada");
			sector.setSalon(salon);
			sector.setMozos(new ArrayList<MozoEntity>());
			sector.setMesas(new ArrayList<MesaEntity>());

			final MozoEntity mozo = new MozoEntity();
			mozo.setId(2L);
			mozo.setLogin("mozo");
			mozo.setPassword("mozo");
			mozo.setNombre("Mozo");
			mozo.setApellido("Del Salon");
			mozo.setPorcentajeBase(0.05D);
			mozo.setArea(salon);

			salon.getEmpleados().add(mozo);

			sector.getMozos().add(mozo);

			final MesaSimpleEntity mesa1 = new MesaSimpleEntity();
			mesa1.setId(1L);
			mesa1.setSector(sector);
			mesa1.setEstado(Mesa.MESA_LIBRE);
			mesa1.setCantidad(2);

			final MesaSimpleEntity mesa2 = new MesaSimpleEntity();
			mesa2.setId(2L);
			mesa2.setSector(sector);
			mesa2.setEstado(Mesa.MESA_LIBRE);
			mesa2.setCantidad(4);

			final MesaSimpleEntity mesa3 = new MesaSimpleEntity();
			mesa3.setId(3L);
			mesa3.setSector(sector);
			mesa3.setEstado(Mesa.MESA_LIBRE);
			mesa3.setCantidad(8);
			
			sector.getMesas().add(mesa1);
			sector.getMesas().add(mesa2);
			sector.getMesas().add(mesa3);

			// PLATOS

						
			final IngredienteEntity ingrediente1 = new IngredienteEntity();
			ingrediente1.setCantidad(500);
			ingrediente1.setId(1L);
			ingrediente1.setProducto(producto1);

			final IngredienteEntity ingrediente2 = new IngredienteEntity();
			ingrediente2.setCantidad(250);
			ingrediente2.setId(2L);
			ingrediente2.setProducto(producto2);

			final IngredienteEntity ingrediente3 = new IngredienteEntity();
			ingrediente3.setCantidad(500);
			ingrediente3.setId(3L);
			ingrediente3.setProducto(producto3);

			final RecetaEntity receta1 = new RecetaEntity();
			receta1.setDescripcionReceta("Bife criollo a la parrilla");
			receta1.setIngredientes(new ArrayList<IngredienteEntity>());
			receta1.getIngredientes().add(ingrediente1);

			final RecetaEntity receta2 = new RecetaEntity();
			receta2.setDescripcionReceta("Pure de papas pisado");
			receta2.setIngredientes(new ArrayList<IngredienteEntity>());
			receta2.getIngredientes().add(ingrediente2);
			receta2.getIngredientes().add(ingrediente3);

			final PlatoEntity plato1 = new PlatoEntity();
			plato1.setId(1L);
			plato1.setActivo(true);
			plato1.setDescripcion("Bife asado");
			plato1.setPrecio(90D);
			plato1.setComisionExtra(0.1D);
			plato1.setTipo("CARNE");
			plato1.setReceta(receta1);

			final PlatoEntity plato2 = new PlatoEntity();
			plato2.setId(2L);
			plato2.setActivo(true);
			plato2.setDescripcion("Pure de papas");
			plato2.setPrecio(30D);
			plato2.setComisionExtra(0D);
			plato2.setTipo("GUARNICION");
			plato2.setReceta(receta2);

			// CAJA

			final CajaEntity caja = new CajaEntity();
			caja.setId(2L);
			caja.setLocal(local);
			caja.setEmpleados(new ArrayList<EmpleadoEntity>());

			final CajeroEntity cajero = new CajeroEntity();
			cajero.setId(3L);
			cajero.setLogin("cajero");
			cajero.setPassword("cajero");
			cajero.setNombre("Cajero");
			cajero.setApellido("De la Caja");
			cajero.setArea(caja);
			
			final MedioPagoEntity medioPago1 = new MedioPagoEntity();
			medioPago1.setId(1L);
			medioPago1.setDescripcion("Efectivo");
			medioPago1.setTipo(MedioPago.TIPO_EFECTIVO);
			
			final MedioPagoEntity medioPago2 = new MedioPagoEntity();
			medioPago2.setId(2L);
			medioPago2.setDescripcion("Visa Electron");
			medioPago2.setTipo(MedioPago.TIPO_TARJETA);

			final MedioPagoEntity medioPago3 = new MedioPagoEntity();
			medioPago3.setId(3L);
			medioPago3.setDescripcion("Visa Gold");
			medioPago3.setTipo(MedioPago.TIPO_TARJETA);
			
			// SAVE ALL!

			session.save(administracion);
			session.save(administrador);
			session.save(depositoCentral);
			session.save(proveedor);
			session.save(local);
			session.save(mozo);
			session.save(salon);
			session.save(sector);
			session.save(mesa1);
			session.save(mesa2);
			session.save(mesa3);

			session.save(unidad1);
			session.save(unidad2);
			session.save(producto1);
			session.save(producto2);
			session.save(producto3);
			session.save(producto4);
			session.save(producto5);
			session.save(ingrediente1);
			session.save(ingrediente2);
			session.save(ingrediente3);
			session.save(plato1);
			session.save(plato2);

			session.save(caja);
			session.save(cajero);
			
			session.save(medioPago1);
			session.save(medioPago2);
			session.save(medioPago3);

			session.save(itemOrdenCompra1);
			session.save(itemOrdenCompra2);
			session.save(ordenCompra);
			
			session.getTransaction().commit();

		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}

	}

}
